간단한 옵션 처리case와 switch를 이용한 옵션 처리
echo
while [ -n "$1" ]; do
case "$1" in
-a) echo "Found the -a option";;
-b) echo "Found the -b option";;
-c) echo "Found the -c option";;
*) echo "$1 is not an option";;
esac
shift
done
매개변수에서 옵션 분리하기종종 스크립트에서 옵션과 매개변수를 같이 사용할 때가 있다.
리눅스에서 표준적으로 특별할 문자 코드로 둘을 불리해서 옵션이 끝나는 위치와 매개변수가 시작되는 위치를 지시한다.
리눅스에서 표준적으로 이중대시(--)를 이용해서 쉘 옵션 목록의 끝임을 표시한다.
echo
while [ -n "$1" ]; do
case "$1" in
-a) echo "Found the -a option";;
-b) echo "Found the -b option";;
-c) echo "Found the -c option";;
--)
shift
break;;
*) echo "$1 is not an option";;
esac
shift
done
count=1
for param in $@; do
echo "Parameter #$count=$param"
count=$[ $count + 1 ]
done
옵션의 값 처리하기일부 옵션은 매개변수를 요구한다.(옵션에 대한 매개변수)
echo
while [ -n "$1" ]; do
case "$1" in
-a) echo "Found the -a option";;
-b)
param="$2"
echo "Found the -b option, with parameter value $param"
shift;;
-c) echo "Found the -c option";;
--)
shift
break;;
*) echo "$1 is not an option";;
esac
shift
done
count=1
for param in "$@"; do
echo "Parameter #$count: $param"
count=$[ $count + 1 ]
done
getopt & getopts 명령
getopt
getopt는 어떤 형식으로 되어있던지 커맨드라인 옵션 및 매개변수의 목록을 받아서 적절한 형식으로 자동 변환한다.
getopt optstring parameters
getopt -q
getopt ab:cd -a -b test1 -cd test2 test3
~ » getopt ab:cd -a -b test1 -cd test2 test3 csian@Bonita-MacBookPro
-a -b test1 -c -d -- test2 test3
optstring에서 뒤에 " : "를 가지는 option은 매개변수를 필요로 하는 option임을 의미한다.
getopt in Shell Scriptshell Script에서 형식적으로 옵션과 매개변수를 처리하기 위해 set 명령을 함께 사용한다.
set -- $(getopt -q ab:cd "$@")
echo
while [ -n "$1"]; do
case "$1" in
-a) echo "Found the -a option";;
-b)
param="$2"
echo "Found the -b option, with parameter value $param"
shift;;
-c) echo "Found the -c option";;
--)
shift
break;;
*) echo "$1 is not an optioin";;
esac
shift
done
count=1
for param in "$@"; do
echo "Parameter #$count=$param"
count=$[ $count + 1 ]
done
getopt는 빈칸을 포함하는 따옴표로 묶인 파라미터에 대해서 빈 칸을 여전히 매개변수 구분자로 해석하고 이를 분리한다
getoptsgetopt의 확장 기능을 내장하고 있다.
getopt는 모든 옵션과 매개변수에 대한 출력을 만들어내지만,
getopts는 존재하는 쉘 매개변수를 차례대로 처리한다.
variable에 현재 매개변수를 저장한다
getopts optstring variable
getopts는 아래 두개의 환경 변수를 이용해서 동작한다
OPTARG: 옵션이 매개변수 값을 요구하는 경우, 사용될 값을 포함
OPTIND: 매개변수 목록 안에서 getops가 중단된 위치의 값
echo
while getopts :ab:c opt; do
case "$opt" in
a) echo "Found the -a option";;
b) echo "Found the -b option, with value $OPTARG";;
c) echo "Found the -c option";;
*) echo "Unknown option: $opt";;
esac
done
shift $[ $OPTIND -1 ]
echo
count=1
for param in "$@"; do
echo "Parameter $count: $param"
count=$[ $count + 1 ]
done
getopts의 optsting이 " : "으로 시작함은 getopt의 -q 옵션처럼 오류 메시지를 표시하지 않음을 의미힌다.getopts는 getopt와 달리 case 변수($opt)는 대시(' - ')를 포함하지 않는다.
getopts는 getopt와 달리 띄어쓰기(따옴표로 둘러싼)을 포함할 수 있다
리눅스에서 주로 사용되는(통용되는) 옵션
-a
|
모든 개체 표시
|
-c
|
카운트
|
-d
|
디렉토리 지정
|
-e
|
개체 확장
|
-f
|
데이터 읽어들일 파일 지정
|
-h
|
도움말 메시지 표시
|
-i
|
텍스트 대소문자 무시
|
-l
|
출력의 긴 형식 버전
|
-n
|
비대화형 모드(일괄처리)
|
-o
|
모든 출력을 리다이렉트할 출력 파일 지정
|
-q
|
침묵 기록 모드에서 실행
|
-r
|
디렉토리와 파일을 재귀적으로 처리
|
-s
|
침목 기록 모드에서 실행
|
-v
|
상세한 출력을 생성
|
-x
|
개체를 제외
|
-y
|
모든 질문에 예(yes)로 답변 |